package Chess.Moves;

import Chess.Pieces.*;
import Chess.*;

/**
 *	An abstract class representing a generic Move in Chess.
 *
 *	@author		Jeff Chan
 */
public abstract class Move {
	public enum MoveType {
		INVALID, NORMAL, CAPTURE, CASTLING, EN_PASSANT, PROMOTION, CHECKMATE
	}
	
	protected Piece piece;
	protected Square startSquare;
	protected Square endSquare;
	
	public Move() {}
	
	public Move(Piece p, Square start, Square end) {
		piece = p;
		startSquare = start;
		endSquare = end;
	}
	
	public Square getEndSquare() {
		return endSquare;
	}
	
	public Piece getPiece() {
		return piece;
	}

	public Square getStartSquare() {
		return startSquare;
	}
	
	public abstract MoveType getMoveType();
	public abstract void undo(Board board);
}